﻿// -------------------------------------------------------------------------
//    @FileName         :    NFRoute.h
//    @Author           :    gaoyi
//    @Date             :    23-12-18
//    @Email			:    445267987@qq.com
//    @Module           :    NFRoute
//    @Desc             :    路由分类定义，提供游戏服务器间的消息路由机制
//
// -------------------------------------------------------------------------

#pragma once

/**
 * @brief 路由分类说明
 * 
 * 假如你有服务器1，服务器2，服务器3，和一个跨服服务器 组成的服务器做. 
 * 每一个服务器都有一个自己的唯一的worldsvr, 3个logicsvr，n个sns服务器， 
 * sns服务器服务器可以是一个，也可以N个，每一个都唯一，都是sns服务器，但功能不同。所有索引不一样。服务器索引可以是friend--1,guild--2
 * 
 * 路由类型详解：
 * 
 * 1.本服路由  LOCAL_ROUTE
 *    本服路由机制，除非明确表示要发往跨服服务器，否则就是本服路由(包过跨服服务器的本服路由) 
 *    (需要保证本跨服服务器只能连接跨服route agent， 不跨服服务器只能连接不跨服的route agent.)
 *    例如：服务器1的logic1发一条消息给worldsvr, 那就只会发给服务器1的worldsvr. 
 *    跨服务器的logic1发一条消息给worldsvr, 只会发给跨服服务器1的worldsvr.
 *
 * 2.跨服路由 CROSS_ROUTE
 *    明确指定要找跨服服务器， 才走跨服路由
 *    例如：服务器1的logic1发一条消息给worldsvr, 那就只会发给跨服服务器1的worldsvr. 
 *    跨服务器的logic1发一条消息给worldsvr, 也只会发给跨服服务器1的worldsvr.
 *
 * 3.LOCAL_ALL_ROUTE
 *    LOCAL_ROUTE的补充，对由于同类型的服务器发送本服路由
 *    例如：服务器1的worldsvr发一条消息给logic，只有服务器1的所有logic都会受到这条消息,
 *    跨服务器的worldsvr发一条消息给logic, 也只有跨服务器的所有logic都会受到这条消息
 *
 * 4.CROSS_ALL_ROUTE
 *    CROSS_ROUTE，对由于同类型的服务器发送跨服路由
 *    如：服务器1的worldsvr发一条消息给logic，只有跨服务器的所有logic都会受到这条消息,
 *    跨服务器的worldsvr发一条消息给logic, 也只有跨服务器的所有logic都会受到这条消息
 *
 * 5.LOCAL_AND_CROSS_ALL_ROUTE
 *    LOCAL_ROUTE和CROSS_ROUTE的补充，对由于同类型本服和跨服的服务器发送跨服路由
 *    例如：服务器1的worldsvr发一条消息给logic，服务器1和跨服务器的所有logic都会受到这条消息,
 *    跨服务器的worldsvr发一条消息给logic, 也只有服务器1和跨服务器的所有logic都会受到这条消息, 服务器2，服务器3，不会受到这条消息
 *
 * 6.ALL_LOCAL_AND_ALL_CROSS_ROUTE
 *    LOCAL_ROUTE和CROSS_ROUTE的补充，对由于同类型所有本服和跨服的服务器发送跨服路由, 包含所有服务器和跨服服务器，
 *    例如：服务器1的worldsvr发一条消息给logic，服务器1,服务器2，服务器3，和跨服务器的所有logic都会受到这条消息
 *
 * 7.LOCAL_ROUTE_ZONE+zoneId 区服路由
 *    LOCAL_ROUTE_ZONE + 区服的zid(1-4096) 只有跨服route server服务器，才有区服路由的能力。 
 *    用于跨服服务器给区服服务器发送消息
 *    例如：跨服服务器worldsvr要给服务器1的worldsvr发送消息， 那么只要发LOCAL_ROUTE_ZONE+服务器1的zid即可, 
 *    如果是要发logicsvr, 那么只有随机一个logicsvr会收到。一般用来发唯一服务区。
 * 
 * 8.busid路由 服务器唯一ID
 */

/**
 * @brief 本服路由
 * 
 * 默认路由类型，消息发送到本服务器内的对应服务
 */
#define LOCAL_ROUTE 0

/**
 * @brief 本服区服路由
 *
 * 跨服路由同服务器类型群发路由 (最大分区65536(目前最大16384)LOCAL_ROUTE+zoneid, 1-65536之间)
 */
#define LOCAL_ROUTE_ZONE 65536

/**
 * @brief 跨服路由
 * 
 * 消息发送到跨服服务器
 */
#define CROSS_ROUTE (LOCAL_ROUTE_ZONE+1)

/**
 * @brief 本服所有同类型服务器路由
 *
 * 对本服所有同类型服务器发送消息
 */
#define LOCAL_ALL_ROUTE (LOCAL_ROUTE_ZONE+2)

/**
 * @brief 跨服所有同类型服务器路由
 *
 * 对跨服所有同类型服务器发送消息
 */
#define CROSS_ALL_ROUTE (LOCAL_ROUTE_ZONE+3)

/**
 * @brief 本服和跨服所有同类型服务器路由
 *
 * 对本服和跨服所有同类型服务器发送消息
 */
#define LOCAL_AND_CROSS_ALL_ROUTE (LOCAL_ROUTE_ZONE+4)

/**
 * @brief 所有服务器路由
 *
 * 对所有服务器和跨服服务器发送消息
 */
#define ALL_LOCAL_AND_ALL_CROSS_ROUTE (LOCAL_ROUTE_ZONE+5)



/**
 * @brief 本服和跨服路由最大值
 * 
 * 用于路由范围检查
 */
#define LOCAL_AND_CROSS_MAX (LOCAL_ROUTE_ZONE+6)
